﻿using DialogShowSingle.IServices;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DialogShowSingle.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        public DelegateCommand OpenCommand { get; set; }

        IEventAggregator _eventAggregator;
        IDialogService _dialogService;
        IDialogManager _dialogManager;
        public MainWindowViewModel(IEventAggregator eventAggregator, IDialogService dialogService, IDialogManager dialogManager)
        {
            _dialogManager = dialogManager;
            _dialogService = dialogService;
            _eventAggregator = eventAggregator;
            OpenCommand = new DelegateCommand(Open);
        }

        private void Open()
        {
            //_eventAggregator.GetEvent<EventMessage>().Publish("");


            //不使用消息（事件总线）的方式处理
            //使用 IDialogService
            //1、传递一个名称：窗口内容对象的名称
            //                 窗口内容：
            //                 名称“UCDetail” 应该是内容注册时候给定的名称
            // 前提是IOC容器中注册了UCDetail这个名称的内容对象
            //_dialogService.ShowDialog("AAAAA");
            //每次打开的页面都是一个新的实例


            //3、弹窗：请求参数
            //IDialogParameters parameters:传给弹窗的参数信息
            DialogParameters parameters = new DialogParameters();
            parameters.Add("id", "Hello Dialog");
            //_dialogService.Show("AAAAA", parameters, OnDialogClose);

            // 直接调用管理器，状态已自动处理
            _dialogManager.ShowDialog("AAAAA", parameters, OnDialogClose);

            //4、可以根据注册Dialog窗口的名称，使用特定的窗口对象
            //注册的窗口名称 如果指定了  在容器中必须存在这个名称的 否则报错KeyNotFoundException: No registered type IDialogWindow with the key win.
            //_dialogService.ShowDialog("AAAAA", parameters, OnDialogClose,"win");
        }

        private void OnDialogClose(IDialogResult result)
        {

        }
    }
}
